fix a fixme.
authorJonathan Blandford <jrb@webwynk.net>
Thu, 12 Apr 2001 16:11:54 +0000 (16:11 +0000)
committerJonathan Blandford <jrb@src.gnome.org>
Thu, 12 Apr 2001 16:11:54 +0000 (16:11 +0000)
Sun Apr  8 05:36:06 2001  Jonathan Blandford  <jrb@webwynk.net>

        * gtk/gtktextview.c (gtk_text_view_class_init): fix a fixme.

        * gtk/gtkcellrendertoggle.c: change GTK_TYPE_POINTER to
        GTK_TYPE_STRING.

        * gtk/gtktreeview.c: New functions to allow initial column
        dragging work.

        * gtk/gtktreeviewcolumn.c: Initial column dragging support.

        * tests/testtreefocus.c: give dave some love.

        * tests/testtreesort.c: Modify test to check really long samples.

20 files changed:
ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtkcellrenderertoggle.c
gtk/gtkliststore.c
gtk/gtktextview.c
gtk/gtktreemodel.c
gtk/gtktreeprivate.h
gtk/gtktreestore.c
gtk/gtktreeview.c
gtk/gtktreeview.h
gtk/gtktreeviewcolumn.c
gtk/gtktreeviewcolumn.h
tests/testgtk.c
tests/testtreefocus.c
tests/testtreesort.c

index ef8a85ae2e0b2a1d060b8e2ca2e88bfde76c90a7..30cba023ac1acb25d823154c2d50b73dfe1738b2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+Sun Apr  8 05:36:06 2001  Jonathan Blandford  <jrb@webwynk.net>
+
+       * gtk/gtktextview.c (gtk_text_view_class_init): fix a fixme.
+
+       * gtk/gtkcellrendertoggle.c: change GTK_TYPE_POINTER to
+       GTK_TYPE_STRING.
+
+       * gtk/gtktreeview.c: New functions to allow initial column
+       dragging work.
+
+       * gtk/gtktreeviewcolumn.c: Initial column dragging support.
+
+       * tests/testtreefocus.c: give dave some love.
+
+       * tests/testtreesort.c: Modify test to check really long samples.
+
 2001-04-11  Alexander Larsson  <alexl@redhat.com>
 
        * gtk-2.0.m4: Pass pkg-config options
index ef8a85ae2e0b2a1d060b8e2ca2e88bfde76c90a7..30cba023ac1acb25d823154c2d50b73dfe1738b2 100644 (file)
@@ -1,3 +1,19 @@
+Sun Apr  8 05:36:06 2001  Jonathan Blandford  <jrb@webwynk.net>
+
+       * gtk/gtktextview.c (gtk_text_view_class_init): fix a fixme.
+
+       * gtk/gtkcellrendertoggle.c: change GTK_TYPE_POINTER to
+       GTK_TYPE_STRING.
+
+       * gtk/gtktreeview.c: New functions to allow initial column
+       dragging work.
+
+       * gtk/gtktreeviewcolumn.c: Initial column dragging support.
+
+       * tests/testtreefocus.c: give dave some love.
+
+       * tests/testtreesort.c: Modify test to check really long samples.
+
 2001-04-11  Alexander Larsson  <alexl@redhat.com>
 
        * gtk-2.0.m4: Pass pkg-config options
index ef8a85ae2e0b2a1d060b8e2ca2e88bfde76c90a7..30cba023ac1acb25d823154c2d50b73dfe1738b2 100644 (file)
@@ -1,3 +1,19 @@
+Sun Apr  8 05:36:06 2001  Jonathan Blandford  <jrb@webwynk.net>
+
+       * gtk/gtktextview.c (gtk_text_view_class_init): fix a fixme.
+
+       * gtk/gtkcellrendertoggle.c: change GTK_TYPE_POINTER to
+       GTK_TYPE_STRING.
+
+       * gtk/gtktreeview.c: New functions to allow initial column
+       dragging work.
+
+       * gtk/gtktreeviewcolumn.c: Initial column dragging support.
+
+       * tests/testtreefocus.c: give dave some love.
+
+       * tests/testtreesort.c: Modify test to check really long samples.
+
 2001-04-11  Alexander Larsson  <alexl@redhat.com>
 
        * gtk-2.0.m4: Pass pkg-config options
index ef8a85ae2e0b2a1d060b8e2ca2e88bfde76c90a7..30cba023ac1acb25d823154c2d50b73dfe1738b2 100644 (file)
@@ -1,3 +1,19 @@
+Sun Apr  8 05:36:06 2001  Jonathan Blandford  <jrb@webwynk.net>
+
+       * gtk/gtktextview.c (gtk_text_view_class_init): fix a fixme.
+
+       * gtk/gtkcellrendertoggle.c: change GTK_TYPE_POINTER to
+       GTK_TYPE_STRING.
+
+       * gtk/gtktreeview.c: New functions to allow initial column
+       dragging work.
+
+       * gtk/gtktreeviewcolumn.c: Initial column dragging support.
+
+       * tests/testtreefocus.c: give dave some love.
+
+       * tests/testtreesort.c: Modify test to check really long samples.
+
 2001-04-11  Alexander Larsson  <alexl@redhat.com>
 
        * gtk-2.0.m4: Pass pkg-config options
index ef8a85ae2e0b2a1d060b8e2ca2e88bfde76c90a7..30cba023ac1acb25d823154c2d50b73dfe1738b2 100644 (file)
@@ -1,3 +1,19 @@
+Sun Apr  8 05:36:06 2001  Jonathan Blandford  <jrb@webwynk.net>
+
+       * gtk/gtktextview.c (gtk_text_view_class_init): fix a fixme.
+
+       * gtk/gtkcellrendertoggle.c: change GTK_TYPE_POINTER to
+       GTK_TYPE_STRING.
+
+       * gtk/gtktreeview.c: New functions to allow initial column
+       dragging work.
+
+       * gtk/gtktreeviewcolumn.c: Initial column dragging support.
+
+       * tests/testtreefocus.c: give dave some love.
+
+       * tests/testtreesort.c: Modify test to check really long samples.
+
 2001-04-11  Alexander Larsson  <alexl@redhat.com>
 
        * gtk-2.0.m4: Pass pkg-config options
index ef8a85ae2e0b2a1d060b8e2ca2e88bfde76c90a7..30cba023ac1acb25d823154c2d50b73dfe1738b2 100644 (file)
@@ -1,3 +1,19 @@
+Sun Apr  8 05:36:06 2001  Jonathan Blandford  <jrb@webwynk.net>
+
+       * gtk/gtktextview.c (gtk_text_view_class_init): fix a fixme.
+
+       * gtk/gtkcellrendertoggle.c: change GTK_TYPE_POINTER to
+       GTK_TYPE_STRING.
+
+       * gtk/gtktreeview.c: New functions to allow initial column
+       dragging work.
+
+       * gtk/gtktreeviewcolumn.c: Initial column dragging support.
+
+       * tests/testtreefocus.c: give dave some love.
+
+       * tests/testtreesort.c: Modify test to check really long samples.
+
 2001-04-11  Alexander Larsson  <alexl@redhat.com>
 
        * gtk-2.0.m4: Pass pkg-config options
index ef8a85ae2e0b2a1d060b8e2ca2e88bfde76c90a7..30cba023ac1acb25d823154c2d50b73dfe1738b2 100644 (file)
@@ -1,3 +1,19 @@
+Sun Apr  8 05:36:06 2001  Jonathan Blandford  <jrb@webwynk.net>
+
+       * gtk/gtktextview.c (gtk_text_view_class_init): fix a fixme.
+
+       * gtk/gtkcellrendertoggle.c: change GTK_TYPE_POINTER to
+       GTK_TYPE_STRING.
+
+       * gtk/gtktreeview.c: New functions to allow initial column
+       dragging work.
+
+       * gtk/gtktreeviewcolumn.c: Initial column dragging support.
+
+       * tests/testtreefocus.c: give dave some love.
+
+       * tests/testtreesort.c: Modify test to check really long samples.
+
 2001-04-11  Alexander Larsson  <alexl@redhat.com>
 
        * gtk-2.0.m4: Pass pkg-config options
index 3970f3246b0f984c00091e4429a2532e24d5353d..281c4adbec469322f9950946ac813ed51d524abc 100644 (file)
@@ -145,9 +145,9 @@ gtk_cell_renderer_toggle_class_init (GtkCellRendererToggleClass *class)
                    GTK_RUN_LAST,
                    GTK_CLASS_TYPE (object_class),
                    GTK_SIGNAL_OFFSET (GtkCellRendererToggleClass, toggled),
-                   gtk_marshal_VOID__POINTER,
+                   gtk_marshal_VOID__STRING,
                    GTK_TYPE_NONE, 1,
-                   GTK_TYPE_POINTER);
+                   GTK_TYPE_STRING);
 }
 
 static void
index 1a4d0710f83544e50ab9aff154a0552d76cf98ba..5737a306eb89becd091eefb795cded2945900b75 100644 (file)
@@ -723,6 +723,7 @@ gtk_list_store_set_valist (GtkListStore *list_store,
          break;
        }
 
+      /* FIXME: instead of calling this n times, refactor with above */
       gtk_list_store_set_value (list_store,
                                iter,
                                column,
index b60250b739e8aad97191c992e71d6d8f68be0651..9cba2fffeaca65ee64896cb7457a73c30e99ef2b 100644 (file)
@@ -516,7 +516,7 @@ gtk_text_view_class_init (GtkTextViewClass *klass)
                            GTK_ARG_READWRITE, ARG_RIGHT_MARGIN);
   gtk_object_add_arg_type ("GtkTextView::indent", GTK_TYPE_INT,
                            GTK_ARG_READWRITE, ARG_INDENT);
-  gtk_object_add_arg_type ("GtkTextView::tabs", GTK_TYPE_POINTER, /* FIXME */
+  gtk_object_add_arg_type ("GtkTextView::tabs", GTK_TYPE_PANGO_TAB_ARRAY,
                            GTK_ARG_READWRITE, ARG_TABS);
 
   /*
index 7356e7aae9317fd00ff5ea9031c8ac9d5072e7a2..982639b3037f87ac40f48101416ef0f8f5f2ff79 100644 (file)
@@ -64,7 +64,6 @@ gtk_tree_model_get_type (void)
   return tree_model_type;
 }
 
-
 static void
 gtk_tree_model_base_init (gpointer g_class)
 {
index cc2f89dd35ef53c883474f88ec0936262ebcd876..1d6076a93f0bae8ae4cb621cdeed91eb17b07af2 100644 (file)
@@ -87,6 +87,8 @@ struct _GtkTreeViewPrivate
 
   GdkWindow *bin_window;
   GdkWindow *header_window;
+  GdkWindow *drag_window;
+  GtkTreeViewColumn *drag_column;
 
   gint expander_column;
 
@@ -116,6 +118,8 @@ struct _GtkTreeViewPrivate
   gint n_columns;
   GList *columns;
   gint header_height;
+  GtkTreeViewColumnDropFunc *column_drop_func;
+  GList *column_drag_info;
 
   /* Scroll timeout (e.g. during dnd) */
   guint scroll_timeout;
@@ -232,7 +236,8 @@ void _gtk_tree_view_column_unrealize_button (GtkTreeViewColumn *column);
 void _gtk_tree_view_column_set_tree_view    (GtkTreeViewColumn *column,
                                             GtkTreeView       *tree_view);
 void _gtk_tree_view_column_unset_tree_view  (GtkTreeViewColumn *column);
-
+void _gtk_tree_view_column_start_drag       (GtkTreeView       *tree_view,
+                                            GtkTreeViewColumn *column);
 
 GtkTreeSelection* _gtk_tree_selection_new                (void);
 GtkTreeSelection* _gtk_tree_selection_new_with_tree_view (GtkTreeView      *tree_view);
index 6fc2d963e8896d01069313c179d263a36b2a5813..cc7c17835b565144bd121966844d3a0d86732c70 100644 (file)
@@ -741,6 +741,7 @@ gtk_tree_store_set_valist (GtkTreeStore *tree_store,
          break;
        }
 
+      /* FIXME: instead of calling this n times, refactor with above */
       gtk_tree_store_set_value (tree_store,
                                iter,
                                column,
index e8a14ed3a6a1db7c7fbd7af8e104786e93c9b96c..a4a115a6ae94fd56dc9d4f7757c6957df36bb848 100644 (file)
 
 #include <gdk/gdkkeysyms.h>
 
+#if defined (GDK_WINDOWING_X11)
+#include "x11/gdkx.h"
+#elif defined (GDK_WINDOWING_WIN32)
+#include "win32/gdkwin32.h"
+#elif defined(GDK_WINDOWING_FB)
+#include "linux-fb/gdkfb.h"
+#elif defined (GDK_WINDOWING_NANOX)
+#include "nanox/gdkprivate-nanox.h"
+#endif
+
 
 /* The "background" areas of all rows/cells add up to cover the entire tree.
  * The background includes all inter-row and inter-cell spacing.
@@ -59,6 +69,16 @@ struct _GtkTreeViewChild
   gint y;
 };
 
+
+typedef struct _GtkTreeViewColumnReorder GtkTreeViewColumnReorder;
+struct _GtkTreeViewColumnReorder
+{
+  gint left_align;
+  gint right_align;
+  GtkTreeViewColumn *left_column;
+  GtkTreeViewColumn *right_column;
+};
+
 enum
 {
   ROW_ACTIVATED,
@@ -241,11 +261,6 @@ static void     gtk_tree_view_discover_dirty       (GtkTreeView      *tree_view,
                                                    GtkTreeIter      *iter,
                                                    gint              depth);
 static void     gtk_tree_view_check_dirty          (GtkTreeView      *tree_view);
-#if 0
-static void     gtk_tree_view_create_button        (GtkTreeView      *tree_view,
-                                                   gint              i);
-static void     gtk_tree_view_create_buttons       (GtkTreeView      *tree_view);
-#endif
 static void     gtk_tree_view_clamp_node_visible   (GtkTreeView      *tree_view,
                                                    GtkRBTree        *tree,
                                                    GtkRBNode        *node);
@@ -459,6 +474,7 @@ gtk_tree_view_init (GtkTreeView *tree_view)
   tree_view->priv->pressed_button = -1;
   tree_view->priv->press_start_x = -1;
   tree_view->priv->press_start_y = -1;
+  tree_view->priv->drag_window = NULL;
 
   gtk_tree_view_set_adjustments (tree_view, NULL, NULL);
   _gtk_tree_view_update_size (tree_view);
@@ -1613,6 +1629,49 @@ ensure_unprelighted (GtkTreeView *tree_view)
   do_unprelight (tree_view, -1000, -1000); /* coords not possibly over an arrow */
 }
 
+
+static gint
+gtk_tree_view_column_button_expose (GtkWidget      *button,
+                                   GdkEventExpose *event,
+                                   gpointer        right)
+{
+  if (button->window != event->window)
+    return FALSE;
+
+  if (GPOINTER_TO_INT (right))
+    {
+      if (event->area.x + event->area.width < button->allocation.width - 2)
+       return FALSE;
+
+      gdk_draw_line (button->window,
+                    button->style->black_gc,
+                    button->allocation.width - 2, 0,
+                    button->allocation.width - 2,
+                    button->allocation.height);
+      gdk_draw_line (button->window,
+                    button->style->white_gc,
+                    button->allocation.width - 1, 0,
+                    button->allocation.width - 1,
+                    button->allocation.height);
+    }
+  else
+    {
+      if (event->area.x > 2)
+       return FALSE;
+
+      gdk_draw_line (button->window,
+                    button->style->black_gc,
+                    1, 0,
+                    1, button->allocation.height);
+      gdk_draw_line (button->window,
+                    button->style->white_gc,
+                    0, 0,
+                    0, button->allocation.height);
+    }
+
+  return FALSE;
+}
+
 static gboolean
 gtk_tree_view_motion (GtkWidget      *widget,
                      GdkEventMotion *event)
@@ -1647,6 +1706,21 @@ gtk_tree_view_motion (GtkWidget      *widget,
       return FALSE;
     }
 
+  if (event->window == tree_view->priv->drag_window)
+    {
+      GtkTreeViewColumn *column = tree_view->priv->drag_column;
+      gint x, y;
+
+      if (column == NULL)
+       return FALSE;
+      gdk_window_get_position (tree_view->priv->drag_window, &x, &y);
+      x = CLAMP (x + (gint)event->x - column->drag_x, 0,
+                MAX (tree_view->priv->width, GTK_WIDGET (tree_view)->allocation.width) - column->button->allocation.width);
+
+      gdk_window_move (tree_view->priv->drag_window, x, y);
+      return TRUE;
+    }
+  
   /* Sanity check it */
   if (event->window != tree_view->priv->bin_window)
     return FALSE;
@@ -1977,6 +2051,22 @@ gtk_tree_view_button_release (GtkWidget      *widget,
 
   tree_view = GTK_TREE_VIEW (widget);
 
+  if (tree_view->priv->drag_column)
+    {
+      gdk_pointer_ungrab (GDK_CURRENT_TIME);
+      gdk_window_reparent (tree_view->priv->drag_column->button->window,
+                          tree_view->priv->header_window,
+                          tree_view->priv->drag_column->button->allocation.x,
+                          tree_view->priv->drag_column->button->allocation.y);
+      gtk_widget_set_parent_window (tree_view->priv->drag_column->button, tree_view->priv->header_window);
+
+      tree_view->priv->drag_column = NULL;
+      gtk_widget_queue_resize (GTK_WIDGET (tree_view));
+      gdk_window_hide (tree_view->priv->drag_window);
+
+      return TRUE;
+    }
+  
   if (tree_view->priv->pressed_button == event->button)
     tree_view->priv->pressed_button = -1;
 
@@ -2041,7 +2131,6 @@ gtk_tree_view_button_release (GtkWidget      *widget,
                                                gtk_tree_path_get_depth (path) + 1,
                                                FALSE,
                                                GTK_WIDGET_REALIZED (widget));
-
                    }
                }
            }
@@ -2743,12 +2832,23 @@ gtk_tree_view_row_activated (GtkTreeView       *tree_view,
                             GtkTreePath       *path,
                             GtkTreeViewColumn *column)
 {
-  g_return_if_fail (tree_view != NULL);
   g_return_if_fail (GTK_IS_TREE_VIEW (tree_view));
 
   g_signal_emit (G_OBJECT(tree_view), tree_view_signals[ROW_ACTIVATED], 0, path, column);
 }
 
+
+void
+gtk_tree_view_map_open_rows (GtkTreeView            *tree_view,
+                            GtkTreeViewMappingFunc  func,
+                            gpointer                data)
+{
+  g_return_if_fail (GTK_IS_TREE_VIEW (tree_view));
+  g_return_if_fail (func != NULL);
+
+  
+}
+
 /* TreeModel Callbacks
  */
 
@@ -3410,70 +3510,6 @@ gtk_tree_view_check_dirty (GtkTreeView *tree_view)
       column->dirty = FALSE;
     }
 }
-#if 0
-static void
-gtk_tree_view_create_buttons (GtkTreeView *tree_view)
-{
-  GtkWidget *alignment;
-  GtkWidget *label;
-  GList *list;
-  GtkTreeViewColumn *column;
-  gint i;
-  GtkWidget *hbox;
-  GtkWidget *arrow;
-
-  /* FIXME this has to be merged with update_button_contents() in
-   * gtktreeviewcolumn.c
-   */
-
-  for (list = tree_view->priv->columns, i = 0; list; list = list->next, i++)
-    {
-      column = list->data;
-
-      if (column->button != NULL)
-       continue;
-
-      gtk_tree_view_create_button (tree_view, i);
-      alignment = gtk_alignment_new (column->xalign, 0.5, 0.0, 0.0);
-
-      hbox = gtk_hbox_new (FALSE, 2);
-      arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_IN);
-
-      column->arrow = arrow;
-      column->alignment = alignment;
-
-      if (column->child)
-        label = column->child;
-      else
-        {
-          label = gtk_label_new (column->title);
-          gtk_widget_show (label);
-        }
-
-      if (column->xalign <= 0.5)
-        gtk_box_pack_end (GTK_BOX (hbox), arrow, FALSE, FALSE, 0);
-      else
-        gtk_box_pack_start (GTK_BOX (hbox), arrow, FALSE, FALSE, 0);
-
-      gtk_box_pack_start (GTK_BOX (hbox), alignment, TRUE, TRUE, 0);
-
-      gtk_container_add (GTK_CONTAINER (alignment), label);
-      gtk_container_add (GTK_CONTAINER (column->button), hbox);
-
-      gtk_widget_show (hbox);
-      gtk_widget_show (alignment);
-      /* don't show the arrow yet */
-    }
-
-  gtk_tree_view_size_request_buttons (tree_view);
-
-  if (GTK_WIDGET_REALIZED (tree_view))
-    gtk_tree_view_realize_buttons (tree_view);
-
-  if (GTK_WIDGET_MAPPED (tree_view))
-    gtk_tree_view_map_buttons (tree_view);
-}
-#endif
 
 /* Make sure the node is visible vertically */
 static void
@@ -3636,6 +3672,106 @@ gtk_tree_view_unref_tree (GtkTreeView *tree_view,
   gtk_tree_path_free (path);
 }
 
+void
+_gtk_tree_view_column_start_drag (GtkTreeView       *tree_view,
+                                 GtkTreeViewColumn *column)
+{
+  GdkEvent send_event;
+  GList *list = NULL;
+  GList *tmp_list;
+  gint left, right;
+  GtkTreeViewColumn *left_column;
+  GtkTreeViewColumn *right_column;
+
+  /* We want to precalculate the motion list such that we know what column slots
+   * are available.
+   */
+  left = 0;
+  left_column = NULL;
+
+  for (tmp_list = tree_view->priv->columns; tmp_list; tmp_list = tmp_list->next)
+    {
+      GtkTreeViewColumnReorder *reorder;
+
+      if (GTK_TREE_VIEW_COLUMN (tmp_list->data)->visible == FALSE)
+       continue;
+
+      right_column = tmp_list->data;
+      reorder = g_malloc (sizeof (GtkTreeViewColumnReorder), 1);
+      reorder->left_align = left;
+    }
+  /*  if (list == NULL)
+      return;*/
+
+  if (tree_view->priv->drag_window == NULL)
+    {
+      GdkWindowAttr attributes;
+      guint attributes_mask;
+
+      attributes.window_type = GDK_WINDOW_CHILD;
+      attributes.wclass = GDK_INPUT_OUTPUT;
+      attributes.visual = gtk_widget_get_visual (GTK_WIDGET (tree_view));
+      attributes.colormap = gtk_widget_get_colormap (GTK_WIDGET (tree_view));
+      attributes.event_mask = GDK_VISIBILITY_NOTIFY_MASK | GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK;
+      attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
+
+      tree_view->priv->drag_window = gdk_window_new (tree_view->priv->bin_window,
+                                                    &attributes,
+                                                    attributes_mask);
+      gdk_window_set_user_data (tree_view->priv->drag_window, GTK_WIDGET (tree_view));
+    }
+
+  gdk_pointer_ungrab (GDK_CURRENT_TIME);
+  gdk_keyboard_ungrab (GDK_CURRENT_TIME);
+
+  gtk_grab_remove (column->button);
+
+  send_event.crossing.type = GDK_LEAVE_NOTIFY;
+  send_event.crossing.send_event = TRUE;
+  send_event.crossing.window = column->button->window;
+  send_event.crossing.subwindow = NULL;
+  send_event.crossing.detail = GDK_NOTIFY_ANCESTOR;
+  send_event.crossing.time = GDK_CURRENT_TIME;
+
+  gtk_propagate_event (column->button, &send_event);
+
+  send_event.button.type = GDK_BUTTON_RELEASE;
+  send_event.button.window = GDK_ROOT_PARENT ();
+  send_event.button.send_event = TRUE;
+  send_event.button.time = GDK_CURRENT_TIME;
+  send_event.button.x = -1;
+  send_event.button.y = -1;
+  send_event.button.axes = NULL;
+  send_event.button.state = 0;
+  send_event.button.button = 1;
+  send_event.button.device = gdk_core_pointer;
+  send_event.button.x_root = 0;
+  send_event.button.y_root = 0;
+
+  gtk_propagate_event (column->button, &send_event);
+
+  gdk_window_move_resize (tree_view->priv->drag_window,
+                         column->button->allocation.x,
+                         column->button->allocation.y + column->button->allocation.height,
+                         column->button->allocation.width,
+                         column->button->allocation.height);
+  gdk_window_reparent (column->button->window, tree_view->priv->drag_window, 0, 0);
+  gtk_widget_set_parent_window (column->button, tree_view->priv->drag_window);
+
+
+  tree_view->priv->drag_column = column;
+  gdk_window_show (tree_view->priv->drag_window);
+
+  while (gtk_events_pending ())
+    gtk_main_iteration ();
+
+  gdk_pointer_grab (tree_view->priv->drag_window,
+                   FALSE,
+                   GDK_POINTER_MOTION_MASK|GDK_BUTTON_RELEASE_MASK,
+                   NULL, NULL, GDK_CURRENT_TIME);
+
+}
+
 static void
 gtk_tree_view_queue_draw_node (GtkTreeView  *tree_view,
                               GtkRBTree    *tree,
@@ -3944,27 +4080,27 @@ gtk_tree_view_setup_model (GtkTreeView *tree_view)
 
   g_signal_connectc (tree_view->priv->model,
                     "range_changed",
-                    gtk_tree_view_range_changed,
+                    (GCallback) gtk_tree_view_range_changed,
                     tree_view,
                     FALSE);
   g_signal_connectc (tree_view->priv->model,
                     "inserted",
-                    gtk_tree_view_inserted,
+                    (GCallback) gtk_tree_view_inserted,
                     tree_view,
                     FALSE);
   g_signal_connectc (tree_view->priv->model,
                     "has_child_toggled",
-                    gtk_tree_view_has_child_toggled,
+                    (GCallback) gtk_tree_view_has_child_toggled,
                     tree_view,
                     FALSE);
   g_signal_connectc (tree_view->priv->model,
                     "deleted",
-                    gtk_tree_view_deleted,
+                    (GCallback) gtk_tree_view_deleted,
                     tree_view,
                     FALSE);
   g_signal_connectc (tree_view->priv->model,
                     "reordered",
-                    gtk_tree_view_reordered,
+                    (GCallback) gtk_tree_view_reordered,
                     tree_view,
                     FALSE);
 
index 94d7d84aaf78c9268be844a8724aafbcbdfd9cd8..640128c5c4d11c24be3e6ef606543b7786972ebe 100644 (file)
@@ -79,6 +79,22 @@ struct _GtkTreeViewClass
   
 };
 
+
+typedef gboolean (* GtkTreeViewColumnDropFunc) (GtkTreeView       *tree_view,
+                                               GtkTreeViewColumn *column,
+                                               GtkTreeViewColumn *prev_column,
+                                               GtkTreeViewColumn *next_column,
+                                               gpointer           data);
+typedef gboolean (* GtkTreeViewDraggableFunc)  (GtkTreeView       *tree_view,
+                                                GdkDragContext    *context,
+                                                GtkTreePath       *path,
+                                               gpointer           user_data);
+typedef void (* GtkTreeViewMappingFunc) (GtkTreeView *tree_view,
+                                        GtkTreePath *path,
+                                        gpointer     user_data);
+
+
+
 GtkType                gtk_tree_view_get_type                      (void);
 GtkWidget             *gtk_tree_view_new                           (void);
 GtkWidget             *gtk_tree_view_new_with_model                (GtkTreeModel       *model);
@@ -110,6 +126,10 @@ gint                   gtk_tree_view_insert_column_with_attributes (GtkTreeView
                                                                    gchar              *title,
                                                                    GtkCellRenderer    *cell,
                                                                    ...);
+void                   gtk_tree_view_move_column                   (GtkTreeView        *tree_view,
+                                                                   GtkTreeViewColumn  *column,
+                                                                   GtkTreeViewColumn  *base_column,
+                                                                   gint                side);
 GtkTreeViewColumn     *gtk_tree_view_get_column                    (GtkTreeView        *tree_view,
                                                                    gint                n);
 void                   gtk_tree_view_set_expander_column           (GtkTreeView        *tree_view,
@@ -152,6 +172,9 @@ gboolean               gtk_tree_view_collapse_row                  (GtkTreeView
 void                   gtk_tree_view_row_activated                 (GtkTreeView        *tree_view,
                                                                    GtkTreePath        *path,
                                                                    GtkTreeViewColumn  *column);
+void                   gtk_tree_view_map_open_rows                 (GtkTreeView        *tree_view,
+                                                                   GtkTreeViewMappingFunc func,
+                                                                   gpointer            data);
 
 void gtk_tree_view_get_visible_rect      (GtkTreeView  *tree_view,
                                           GdkRectangle *visible_rect);
@@ -172,12 +195,6 @@ gboolean gtk_tree_view_get_rules_hint     (GtkTreeView  *tree_view);
 
 
 /* Drag-and-Drop support */
-
-typedef gboolean (* GtkTreeViewDraggableFunc) (GtkTreeView    *tree_view,
-                                               GdkDragContext *context,
-                                               GtkTreePath    *path,
-                                               gpointer        user_data);
-
 /* this func can change "pos" if it likes, in addition to returning
  * true/false for whether a drop is possible
  */
index 2ceba9ff5f0a65ff9641b56ee7c001c42eec555a..83662fbf57d2a922d3f05ea53532f6a5f0793d93 100644 (file)
@@ -28,6 +28,7 @@
 #include "gtkarrow.h"
 #include "gtkintl.h"
 #include <string.h>
+
 enum
 {
   PROP_0,
@@ -259,6 +260,8 @@ gtk_tree_view_column_init (GtkTreeViewColumn *tree_column)
   tree_column->sort_clicked_signal = 0;
   tree_column->sort_column_changed_signal = 0;
   tree_column->sort_column_id = -1;
+  tree_column->reorderable = 1;
+  tree_column->maybe_reordered = 0;
 }
 
 static void
@@ -470,6 +473,57 @@ gtk_tree_view_column_button_clicked (GtkWidget *widget, gpointer data)
   g_signal_emit_by_name (G_OBJECT (data), "clicked");
 }
 
+static void
+gtk_tree_view_column_button_released (GtkWidget *widget, gpointer data)
+{
+  GtkTreeViewColumn *column = (GtkTreeViewColumn *) data;
+
+  gtk_widget_show (widget);
+  column->maybe_reordered = FALSE;
+}
+static gint
+gtk_tree_view_column_button_motion_event (GtkWidget      *widget,
+                                         GdkEventMotion *event,
+                                         gpointer        data)
+{
+  GtkTreeViewColumn *column = (GtkTreeViewColumn *) data;
+
+  if ((column->maybe_reordered) &&
+      (gtk_drag_check_threshold (widget,
+                                column->drag_x,
+                                column->drag_y,
+                                (gint) event->x,
+                                (gint) event->y)))
+    {
+      column->maybe_reordered = FALSE;
+      _gtk_tree_view_column_start_drag (GTK_TREE_VIEW (column->tree_view),
+                                       column);
+    }
+
+  return TRUE;
+}
+
+static void
+gtk_tree_view_column_button_realize (GtkWidget *widget, gpointer data)
+{
+  gdk_window_set_events (widget->window, gdk_window_get_events (widget->window) | GDK_POINTER_MOTION_MASK);
+}
+
+static void
+gtk_tree_view_column_button_pressed (GtkWidget *widget, gpointer data)
+{
+  GtkTreeViewColumn *column = (GtkTreeViewColumn *) data;
+
+  if (! column->reorderable)
+    return;
+
+  column->maybe_reordered = TRUE;
+  gdk_window_get_pointer (widget->window,
+                         &column->drag_x,
+                         &column->drag_y,
+                         NULL);
+}
+
 void
 _gtk_tree_view_column_create_button (GtkTreeViewColumn *column)
 {
@@ -490,9 +544,21 @@ _gtk_tree_view_column_create_button (GtkTreeViewColumn *column)
   /* make sure we own a reference to it as well. */
   gtk_widget_set_parent (column->button, GTK_WIDGET (tree_view));
   
+  gtk_signal_connect (GTK_OBJECT (column->button), "realize",
+                     (GtkSignalFunc) gtk_tree_view_column_button_realize,
+                     NULL);
   gtk_signal_connect (GTK_OBJECT (column->button), "clicked",
                      (GtkSignalFunc) gtk_tree_view_column_button_clicked,
                      (gpointer) column);
+  gtk_signal_connect (GTK_OBJECT (column->button), "pressed",
+                     (GtkSignalFunc) gtk_tree_view_column_button_pressed,
+                     (gpointer) column);
+  gtk_signal_connect (GTK_OBJECT (column->button), "motion_notify_event",
+                     (GtkSignalFunc) gtk_tree_view_column_button_motion_event,
+                     (gpointer) column);
+  gtk_signal_connect (GTK_OBJECT (column->button), "released",
+                     (GtkSignalFunc) gtk_tree_view_column_button_released,
+                     (gpointer) column);
 
   column->alignment = gtk_alignment_new (column->xalign, 0.5, 0.0, 0.0);
 
@@ -1608,6 +1674,7 @@ sort_clicked_func (GtkTreeViewColumn *tree_column,
 
       list = list->next;
     }
+
   gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (GTK_TREE_VIEW (tree_column->tree_view)->priv->model),
                                        tree_column->sort_column_id,
                                        tree_column->sort_order);
index 79987aabf638ab58edb53e21f95dfd1fef6ee64a..779edb39db2ba9fab4a906591ae682b5674d0f6c 100644 (file)
@@ -70,6 +70,10 @@ struct _GtkTreeViewColumn
   gint max_width;
   gint displayed_width;
 
+  /* dragging columns */
+  gint drag_x;
+  gint drag_y;
+
   GtkCellDataFunc func;
   gpointer func_data;
   GtkDestroyNotify destroy;
@@ -88,6 +92,8 @@ struct _GtkTreeViewColumn
   guint button_active : 1;
   guint dirty         : 1;
   guint show_sort_indicator : 1;
+  guint maybe_reordered     : 1;
+  guint reorderable   : 1;
 };
 
 struct _GtkTreeViewColumnClass
index 5d0eceda231052496a9d81e0520c2d67c817f4db..d9af0fdfe2984f96f393efb3344cd9d38730c7bc 100644 (file)
@@ -10285,7 +10285,7 @@ create_main_window (void)
   gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
   gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
 
-  button = gtk_button_new_with_label ("close");
+  button = gtk_button_new_with_mnemonic ("_Close");
   gtk_signal_connect (GTK_OBJECT (button), "clicked",
                      GTK_SIGNAL_FUNC (do_exit),
                      window);
index 5df51eb375da81ce361a0c0561c5ffdf413b319a..7c7401ef2a6a1169eaecfe0efd8243c8a058304d 100644 (file)
@@ -8,126 +8,128 @@ struct _TreeStruct
   gboolean havoc;
   gboolean tim;
   gboolean owen;
+  gboolean dave;
   gboolean world_holiday; /* shared by the european hackers */
   TreeStruct *children;
 };
 
+
 static TreeStruct january[] =
 {
-  {"New Years Day", TRUE, TRUE, TRUE, TRUE, TRUE, NULL},
-  {"Presidential Inauguration", FALSE, TRUE, FALSE, TRUE, FALSE, NULL},
-  {"Martin Luther King Jr. day", FALSE, TRUE, FALSE, TRUE, FALSE, NULL},
+  {"New Years Day", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
+  {"Presidential Inauguration", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
+  {"Martin Luther King Jr. day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
   { NULL }
 };
 
 static TreeStruct february[] =
 {
-  { "Presidents' Day", FALSE, TRUE, FALSE, TRUE, FALSE, NULL },
-  { "Groundhog Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
-  { "Valentine's Day", FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
+  { "Presidents' Day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
+  { "Groundhog Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Valentine's Day", FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, NULL },
   { NULL }
 };
 
 static TreeStruct march[] =
 {
-  { "National Tree Planting Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
-  { "St Patrick's Day", FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
+  { "National Tree Planting Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "St Patrick's Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
   { NULL }
 };
 
 static TreeStruct april[] =
 {
-  { "April Fools' Day", FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
-  { "Army Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
-  { "Earth Day", FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
-  { "Administrative Professionals' Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "April Fools' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
+  { "Army Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Earth Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
+  { "Administrative Professionals' Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
   { NULL }
 };
 
 static TreeStruct may[] =
 {
-  { "Nurses' Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
-  { "National Day of Prayer", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
-  { "Mothers' Day", FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
-  { "Armed Forces Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
-  { "Memorial Day", TRUE, TRUE, TRUE, TRUE, TRUE, NULL },
+  { "Nurses' Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "National Day of Prayer", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Mothers' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
+  { "Armed Forces Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Memorial Day", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
   { NULL }
 };
 
 static TreeStruct june[] =
 {
-  { "June Fathers' Day", FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
-  { "Juneteenth (Liberation of Slaves)", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
-  { "Flag Day", FALSE, TRUE, FALSE, TRUE, FALSE, NULL },
+  { "June Fathers' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
+  { "Juneteenth (Liberation of Slaves)", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Flag Day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
   { NULL }
 };
 
 static TreeStruct july[] =
 {
-  { "Parents' Day", FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
-  { "Independence Day", FALSE, TRUE, FALSE, TRUE, FALSE, NULL },
+  { "Parents' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
+  { "Independence Day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
   { NULL }
 };
 
 static TreeStruct august[] =
 {
-  { "Air Force Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
-  { "Coast Guard Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
-  { "Friendship Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Air Force Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Coast Guard Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Friendship Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
   { NULL }
 };
 
 static TreeStruct september[] =
 {
-  { "Grandparents' Day", FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
-  { "Citizenship Day or Constitution Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
-  { "Labor Day", TRUE, TRUE, TRUE, TRUE, TRUE, NULL },
+  { "Grandparents' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
+  { "Citizenship Day or Constitution Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Labor Day", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
   { NULL }
 };
 
 static TreeStruct october[] =
 {
-  { "National Children's Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
-  { "Bosses' Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
-  { "Sweetest Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
-  { "Mother-in-Law's Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
-  { "Navy Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
-  { "Columbus Day", FALSE, TRUE, FALSE, TRUE, FALSE, NULL },
-  { "Halloween", FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
+  { "National Children's Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Bosses' Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Sweetest Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Mother-in-Law's Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Navy Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Columbus Day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
+  { "Halloween", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
   { NULL }
 };
 
 static TreeStruct november[] =
 {
-  { "Marine Corps Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
-  { "Veterans' Day", TRUE, TRUE, TRUE, TRUE, TRUE, NULL },
-  { "Thanksgiving", FALSE, TRUE, FALSE, TRUE, FALSE, NULL },
+  { "Marine Corps Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Veterans' Day", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
+  { "Thanksgiving", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
   { NULL }
 };
 
 static TreeStruct december[] =
 {
-  { "Pearl Harbor Remembrance Day", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
-  { "Christmas", TRUE, TRUE, TRUE, TRUE, TRUE, NULL },
-  { "Kwanzaa", FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Pearl Harbor Remembrance Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
+  { "Christmas", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
+  { "Kwanzaa", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
   { NULL }
 };
 
 
 static TreeStruct toplevel[] =
 {
-  {"January", FALSE, FALSE, FALSE, FALSE, FALSE, january},
-  {"February", FALSE, FALSE, FALSE, FALSE, FALSE, february},
-  {"March", FALSE, FALSE, FALSE, FALSE, FALSE, march},
-  {"April", FALSE, FALSE, FALSE, FALSE, FALSE, april},
-  {"May", FALSE, FALSE, FALSE, FALSE, FALSE, may},
-  {"June", FALSE, FALSE, FALSE, FALSE, FALSE, june},
-  {"July", FALSE, FALSE, FALSE, FALSE, FALSE, july},
-  {"August", FALSE, FALSE, FALSE, FALSE, FALSE, august},
-  {"September", FALSE, FALSE, FALSE, FALSE, FALSE, september},
-  {"October", FALSE, FALSE, FALSE, FALSE, FALSE, october},
-  {"November", FALSE, FALSE, FALSE, FALSE, FALSE, november},
-  {"December", FALSE, FALSE, FALSE, FALSE, FALSE, december},
+  {"January", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, january},
+  {"February", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, february},
+  {"March", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, march},
+  {"April", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, april},
+  {"May", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, may},
+  {"June", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, june},
+  {"July", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, july},
+  {"August", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, august},
+  {"September", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, september},
+  {"October", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, october},
+  {"November", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, november},
+  {"December", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, december},
   {NULL}
 };
 
@@ -139,6 +141,7 @@ enum
   HAVOC_COLUMN,
   TIM_COLUMN,
   OWEN_COLUMN,
+  DAVE_COLUMN,
   VISIBLE_COLUMN,
   WORLD_COLUMN,
   NUM_COLUMNS
@@ -151,7 +154,15 @@ make_model (void)
   TreeStruct *month = toplevel;
   GtkTreeIter iter;
 
-  model = gtk_tree_store_new_with_types (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN);
+  model = gtk_tree_store_new_with_types (NUM_COLUMNS,
+                                        G_TYPE_STRING,
+                                        G_TYPE_BOOLEAN,
+                                        G_TYPE_BOOLEAN,
+                                        G_TYPE_BOOLEAN,
+                                        G_TYPE_BOOLEAN,
+                                        G_TYPE_BOOLEAN,
+                                        G_TYPE_BOOLEAN,
+                                        G_TYPE_BOOLEAN);
 
   while (month->label)
     {
@@ -164,6 +175,7 @@ make_model (void)
                          HAVOC_COLUMN, FALSE,
                          TIM_COLUMN, FALSE,
                          OWEN_COLUMN, FALSE,
+                         DAVE_COLUMN, FALSE,
                          VISIBLE_COLUMN, FALSE,
                          WORLD_COLUMN, FALSE,
                          -1);
@@ -178,6 +190,7 @@ make_model (void)
                              HAVOC_COLUMN, holiday->havoc,
                              TIM_COLUMN, holiday->tim,
                              OWEN_COLUMN, holiday->owen,
+                             DAVE_COLUMN, holiday->dave,
                              VISIBLE_COLUMN, TRUE,
                              WORLD_COLUMN, holiday->world_holiday,
                              -1);
@@ -266,6 +279,25 @@ tim_toggled (GtkCellRendererToggle *cell,
   gtk_tree_path_free (path);
 }
 
+static void
+dave_toggled (GtkCellRendererToggle *cell,
+             gchar                 *path_str,
+             gpointer               data)
+{
+  GtkTreeModel *model = (GtkTreeModel *) data;
+  GtkTreeIter iter;
+  GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
+  gboolean dave;
+
+  gtk_tree_model_get_iter (model, &iter, path);
+  gtk_tree_model_get (model, &iter, DAVE_COLUMN, &dave, -1);
+
+  dave = !dave;
+  gtk_tree_store_set (GTK_TREE_STORE (model), &iter, DAVE_COLUMN, dave, -1);
+
+  gtk_tree_path_free (path);
+}
+
 int
 main (int argc, char *argv[])
 {
@@ -281,6 +313,7 @@ main (int argc, char *argv[])
   gtk_init (&argc, &argv);
 
   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_title (GTK_WINDOW (window), "Card planning sheet");
   gtk_signal_connect (GTK_OBJECT (window), "destroy", gtk_main_quit, NULL);
   vbox = gtk_vbox_new (FALSE, 8);
   gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
@@ -294,7 +327,6 @@ main (int argc, char *argv[])
 
   model = make_model ();
   tree_view = gtk_tree_view_new_with_model (model);
-  g_object_unref (G_OBJECT (model));
   gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
 
   renderer = gtk_cell_renderer_text_new ();
@@ -369,8 +401,114 @@ main (int argc, char *argv[])
   gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
   g_object_unref (renderer);
 
+  /* Owen Column */
+  renderer = gtk_cell_renderer_toggle_new ();
+  g_signal_connect_data (G_OBJECT (renderer), "toggled", dave_toggled, model, NULL, FALSE, FALSE);
+  g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
+  col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
+                                              -1, "Dave",
+                                              renderer,
+                                              "active", DAVE_COLUMN,
+                                              "visible", VISIBLE_COLUMN,
+                                              NULL);
+  column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
+  gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
+  gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
+  g_object_unref (renderer);
+
+  gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
+
+  gtk_signal_connect (GTK_OBJECT (tree_view), "realize",
+                     GTK_SIGNAL_FUNC (gtk_tree_view_expand_all),
+                     NULL);
+  gtk_window_set_default_size (GTK_WINDOW (window),
+                              650, 400);
+  gtk_widget_show_all (window);
+
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_title (GTK_WINDOW (window), "Model");
+  gtk_signal_connect (GTK_OBJECT (window), "destroy", gtk_main_quit, NULL);
+  vbox = gtk_vbox_new (FALSE, 8);
+  gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
+  gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("The model revealed"), FALSE, FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (window), vbox);
+
+  scrolled_window = gtk_scrolled_window_new (NULL, NULL);
+  gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_ETCHED_IN);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+  gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
+
+
+  tree_view = gtk_tree_view_new_with_model (model);
+  g_object_unref (G_OBJECT (model));
+  gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
+
+  renderer = gtk_cell_renderer_text_new ();
+  gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
+                                              -1, "Holiday Column",
+                                              renderer,
+                                              "text", 0, NULL);
+  g_object_unref (renderer);
+
+  renderer = gtk_cell_renderer_text_new ();
+  gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
+                                              -1, "Alex Column",
+                                              renderer,
+                                              "text", 1, NULL);
+  g_object_unref (renderer);
+
+  renderer = gtk_cell_renderer_text_new ();
+  gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
+                                              -1, "Havoc Column",
+                                              renderer,
+                                              "text", 2, NULL);
+  g_object_unref (renderer);
+
+  renderer = gtk_cell_renderer_text_new ();
+  gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
+                                              -1, "Tim Column",
+                                              renderer,
+                                              "text", 3, NULL);
+  g_object_unref (renderer);
+
+  renderer = gtk_cell_renderer_text_new ();
+  gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
+                                              -1, "Owen Column",
+                                              renderer,
+                                              "text", 4, NULL);
+  g_object_unref (renderer);
+
+  renderer = gtk_cell_renderer_text_new ();
+  gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
+                                              -1, "Dave Column",
+                                              renderer,
+                                              "text", 5, NULL);
+  g_object_unref (renderer);
+
+  renderer = gtk_cell_renderer_text_new ();
+  gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
+                                              -1, "Visible Column",
+                                              renderer,
+                                              "text", 6, NULL);
+  g_object_unref (renderer);
+
+  renderer = gtk_cell_renderer_text_new ();
+  gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
+                                              -1, "World Holiday",
+                                              renderer,
+                                              "text", 7, NULL);
+  g_object_unref (renderer);
+
+  gtk_signal_connect (GTK_OBJECT (tree_view), "realize",
+                     GTK_SIGNAL_FUNC (gtk_tree_view_expand_all),
+                     NULL);
+                          
   gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
 
+
+  gtk_window_set_default_size (GTK_WINDOW (window),
+                              650, 400);
+
   gtk_widget_show_all (window);
   gtk_main ();
 
index 84169a3fa7617c62d9379b2a57dae02ecc6ae8a9..f8d8be52aa411fa82025398c7eb470bf84e79c22 100644 (file)
@@ -12,7 +12,7 @@ struct _ListSort
 
 static ListSort data[] =
 {
-  { "Apples", "Transmorgrify", "Exculpatory", "Gesundheit"},
+  { "Apples", "Transmorgrify long word to demonstrate weirdness", "Exculpatory", "Gesundheit"},
   { "Oranges", "Wicker", "Adamantine", "Convivial" },
   { "Bovine Spongiform Encephilopathy", "Sleazebucket", "Mountaineer", "Pander" },
   { "Foot and Mouth", "Lampshade", "Skim Milk\nFull Milk", "Viewless" },
@@ -48,11 +48,12 @@ main (int argc, char *argv[])
   GtkCellRenderer *renderer;
   GtkTreeViewColumn *column;
   GtkTreeIter iter;
-  gint i;
+  gint i, j;
 
   gtk_init (&argc, &argv);
 
   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_title (GTK_WINDOW (window), "Words, words, words");
   gtk_signal_connect (GTK_OBJECT (window), "destroy", gtk_main_quit, NULL);
   vbox = gtk_vbox_new (FALSE, 8);
   gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
@@ -65,20 +66,22 @@ main (int argc, char *argv[])
   gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
 
   model = gtk_list_store_new_with_types (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
-  gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model),
-                                       0, GTK_TREE_SORT_ASCENDING);
-  for (i = 0; data[i].word_1 != NULL; i++)
-    {
-      gtk_list_store_append (GTK_LIST_STORE (model), &iter);
-      gtk_list_store_set (GTK_LIST_STORE (model), &iter,
-                         WORD_COLUMN_1, data[i].word_1,
-                         WORD_COLUMN_2, data[i].word_2,
-                         WORD_COLUMN_3, data[i].word_3,
-                         WORD_COLUMN_4, data[i].word_4,
-                         -1);
-    }
-
+  //  gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model), 0, GTK_TREE_SORT_ASCENDING);
+  g_print ("start model\n");
   tree_view = gtk_tree_view_new_with_model (model);
+  for (j = 0; j < 2; j++)
+    for (i = 0; data[i].word_1 != NULL; i++)
+      {
+       gtk_list_store_prepend (GTK_LIST_STORE (model), &iter);
+       gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+                           WORD_COLUMN_1, data[i].word_1,
+                           WORD_COLUMN_2, data[i].word_2,
+                           WORD_COLUMN_3, data[i].word_3,
+                           WORD_COLUMN_4, data[i].word_4,
+                           -1);
+      }
+  g_print ("done with model\n");
+
   g_object_unref (G_OBJECT (model));
   gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
 
@@ -105,7 +108,7 @@ main (int argc, char *argv[])
   column = gtk_tree_view_column_new_with_attributes ("Third Word", renderer,
                                                     "text", WORD_COLUMN_3,
                                                     NULL);
-  gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_1);
+  gtk_tree_view_column_set_sort_column_id (column, WORD_COLUMN_3);
   gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
   g_object_unref (column);
   g_object_unref (renderer);